<?php

namespace app\common\job;

use app\common\model\Merchant;
use think\Log;
use think\Queue;
use think\queue\Job;
use Wnkj\WnCardObj;

class SendMsgBonus
{
    public function task_bonus_put($data = '')
    {

        // 1.当前任务将由哪个类来负责处理。
        //   当轮到该任务时，系统将生成一个该类的实例，并调用其 fire 方法
        $jobHandlerClassName = 'app\common\job\SendNotify';
        // 2.当前任务归属的队列名称，如果为新队列，会自动创建
        $jobQueueName = "task_bonus_put_os";
        // 3.当前任务所需的业务数据 . 不能为 resource 类型，其他类型最终将转化为json形式的字符串
        //   ( jobData 为对象时，需要在先在此处手动序列化，否则只存储其public属性的键值对)
        if (is_array($data)) {
            $data = json_encode($data, 256);
        }

        $jobData = $data;
        // 4.将该任务推送到消息队列，等待对应的消费者去执行
        $isPushed = Queue::push($jobHandlerClassName, $jobData, $jobQueueName);
        // database 驱动时，返回值为 1|false  ;   redis 驱动时，返回值为 随机字符串|false
        if ($isPushed !== false) {
            return 'success';
        } else {
            return 'error';
        }
    }

    public function fire(Job $job, $data)
    {

        $isJobDone = $this->task_notify($data);
        $job->delete();

        if ($isJobDone) {
            //如果任务执行成功， 记得删除任务
            $job->delete();
            return '完成';
        } else {
            if ($job->attempts() > 3) {
                print("<warn>任务已完成3次!" . "</warn>\n");
                $job->delete();
                // 也可以重新发布这个任务
                //print("<info>Hello Jobmach will be availabe again after 2s."."</info>\n");
                //$job->release(2); //$delay为延迟时间，表示该任务延迟2秒后再执行
            }
        }
    }



    /**
     * 根据消息中的数据进行实际的业务处理
     * @param array|mixed $data 发布任务时自定义的数据
     * @return boolean                 任务执行的结果
     */


    //执行异步通知
    public function task_notify($param)
    {
        try{
            if(is_array($param)){
                $param=json_encode($param,JSON_UNESCAPED_UNICODE);
            }
            //初始化微信类
            if (isset($param['param']['card_id'])) {
                $userlist = $param['param']['userlist'];                                    //用户列表
                foreach ($userlist as $k => $v) {
                    $option['card_id'] = $param['param']['card_id'];                        //card_id
                    $option['code'] = $v['code'];                                           //code
                    $option['orderid'] = '';
                    $option['num'] = $param['param']['add_bonus'];                          //add_bonus
                    $option['bd_cate'] = 'bonus';
                    $option['type'] = 1;//变动 1增加 2减少
                    $option['cate'] = 1;  //变动类型
                    $option['pay_cate'] = 4; //支付方式
                    $option['source'] = 'web';  //来源
                    $option['remark'] = $param['param']['remark']; //备注                   //remark
                    $option['action_user'] = $param['param']['action_user'];//操作人        //action_user
                    $Fztest = new WnCardObj($option);
                    $res = $Fztest->init();
                    $datass[$k]['info'] = json_encode($res,JSON_UNESCAPED_UNICODE);

                }

                return 'success';
            }
        }catch (\Exception $e){
            Log::write("task_notify:".$e->getMessage() . $e->getFile() . ":" . $e->getLine(),'SysRunErrorLog');
        }


    }



}